
const mysql = require('mysql');

/**
 * 数据库模型的基类
 * 封装了数据库的基本操作
 */
class Model{
    // 连接对象
    static conn = null;

    /**
     * 数据库连接方法
     */
    static connection(){
        Model.conn = mysql.createConnection({
            host:'localhost',
            user:'root',
            password:'',
            database:'blog'
        });
        Model.conn.connect(err => {
            if(err){
                console.log(`数据库连接失败:${err.message}`);
            }
        });
    }
    /**
     * 关闭数据库连接
     */
    static end(){
        if(null != Model.conn){
            Model.conn.end();
        }
    }

    /**
     * 适用的数据查询方法
     * @param {string} sql 要执行的sql语句
     * @param {Array} params 给sql语句的占位符进行赋值的参数数组
     */
    static query(sql,params=[]){
        return new Promise((resolve,reject) =>{
            // 连接数据库
            this.connection();
            // 进行数据库操作
            Model.conn.query(sql,params,(err,results) =>{
                if(err){
                    reject(err);
                }else{
                    resolve(results);
                }
            });
            // 关闭数据库
            this.end();
        })
    }
    /**
     * 使用数据库返回 Promise的封装
     * @param {String} sql 数据库语句
     * @param {String} Tips    提示语句
     * @param {Array} param     数据库参数
     */
    static getPromise(sql,Tips,param=[]){
        return new Promise((resolve,reject) =>{
            // 父类继承的方法query
            this.query(sql,param).then(res =>{
                resolve(res);
            }).catch(err =>{
                console.log(`${Tips}:${err.message}`);
                reject(err);
            });
        });
    }
}
module.exports = Model;